class MyArray<T> {
    public Object[] array = new Object[10];

    public void setValue(int pos, T x) {
        array[pos] = x;
    }

    public T getValue(int pos) {
        return (T)array[pos];
    }
}
//定义一个泛型类,找到数组中的最大值
class Alg<T extends Comparable<T>>{
    public T findMax(T[] array){
        T max = array[0];
        for(int i = 1;i < array.length;i ++){
            //if (array[i] > max){            这里的Object类或者其他的类没有实现comparable接口,不能直接使用compareTo进行比较
            // 引用类型的比较
            if (array[i].compareTo(max) > 0){
                max = array[i];
            }
        }
        return max;
    }
}

class Alg2{
    public <T extends Comparable<T>> T findMax(T[] array){          //泛型方法,如果使用静态泛型方法一样的使用方法
        T max = array[0];
        for(int i = 1;i < array.length;i ++){
            if (array[i].compareTo(max) > 0){
                max = array[i];
            }
        }
        return max;
    }
}

public class 泛型 {
    public static void main(String[] args) {
        Alg2 alg2 = new Alg2();
        Integer[] array = {1,2,3,4,5,6};
        System.out.println(alg2.findMax(array));
    }
    public static void main5(String[] args) {
        Alg<Integer> alg = new Alg<>();
        Integer[] array = {1,2,3,4,5,6};
        System.out.println(alg.findMax(array));

    }
    public static void main4(String[] args) {
        MyArray<Integer> myArray = new MyArray<>();
        myArray.setValue(0,10);
        myArray.setValue(1,8);

        MyArray<String> myArray1 = new MyArray<>();
        myArray1.setValue(1,"hello");

    }
    public static void main3(String[] args) {
        Integer a = 100;
        Integer b = 100;
        System.out.println(a == b);//true

        Integer c = 200;
        Integer d = 200;
        System.out.println(c == d);//false

        //涉及到装箱
        //装箱操作,心间一个Integer类型对象,将i的值放入对象的某个属性中
        //拆箱操作,将Integer对象中的值取出,放到一个基本数据类型中
    }
    public static void main2(String[] args) {
        Integer ii = 10;//装箱
        int a = ii; //自动拆箱
        int aa = ii.intValue();//手动拆箱
    }
    public static void main1(String[] args) {
        int a = 10;
        Integer ii = Integer.valueOf(a);//显式装箱
        Integer ii2 = a;                //隐式装箱
    }
}
